<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta name="generator" content="ApiGen 2.6.0" />
	<meta name="robots" content="noindex" />

	<title>File __model.php</title>

	<script type="text/javascript" src="resources/combined.js?428767200"></script>
	<script type="text/javascript" src="elementlist.js?4200546020"></script>
	<link rel="stylesheet" type="text/css" media="all" href="resources/style.css?2495970611" />

</head>

<body>
<div id="left">
	<div id="menu">
		<a href="index.html" title="Overview"><span>Overview</span></a>


		<div id="groups">
			<h3>Namespaces</h3>
			<ul>
				<li class="active"><a href="namespace-None.html">None</a>
						</li>
				<li><a href="namespace-PHP.html">PHP</a>
						</li>
			</ul>
		</div>

		<hr />


		<div id="elements">
			<h3>Classes</h3>
			<ul>
				<li><a href="class-DIBase.html">DIBase</a></li>
				<li><a href="class-DIConfig.html">DIConfig</a></li>
				<li><a href="class-DIContext.html">DIContext</a></li>
				<li><a href="class-DIContext_Inject.html">DIContext_Inject</a></li>
				<li><a href="class-DIDBConfig.html" class="invalid">DIDBConfig</a></li>
				<li><a href="class-DIDo.html">DIDo</a></li>
				<li><a href="class-DIEntity.html">DIEntity</a></li>
				<li><a href="class-DIError.html">DIError</a></li>
				<li><a href="class-DIErrorCode.html">DIErrorCode</a></li>
				<li><a href="class-DIEvent.html">DIEvent</a></li>
				<li><a href="class-DIFilterMap.html">DIFilterMap</a></li>
				<li><a href="class-DIFilterUtil.html">DIFilterUtil</a></li>
				<li><a href="class-DIInclude.html">DIInclude</a></li>
				<li><a href="class-DIIncludeConfig.html">DIIncludeConfig</a></li>
				<li><a href="class-DIInject.html">DIInject</a></li>
				<li><a href="class-DILet.html">DILet</a></li>
				<li><a href="class-DIModel.html">DIModel</a></li>
				<li class="active"><a href="class-DIModelUtil.html">DIModelUtil</a></li>
				<li><a href="class-DIMySQL.html">DIMySQL</a></li>
				<li><a href="class-DIRoute.html">DIRoute</a></li>
				<li><a href="class-DIRuntime.html">DIRuntime</a></li>
				<li><a href="class-DIRuntime_Imported.html">DIRuntime_Imported</a></li>
				<li><a href="class-DIService.html">DIService</a></li>
				<li><a href="class-DITpl.html">DITpl</a></li>
				<li><a href="class-DIUrlShell.html">DIUrlShell</a></li>
				<li><a href="class-Global1Filter.html">Global1Filter</a></li>
				<li><a href="class-Global2Filter.html">Global2Filter</a></li>
				<li><a href="class-Global3Filter.html">Global3Filter</a></li>
				<li><a href="class-OrekiUtil.html">OrekiUtil</a></li>
				<li><a href="class-TemplateDo.html">TemplateDo</a></li>
				<li><a href="class-Test.html">Test</a></li>
				<li><a href="class-TestDo.html">TestDo</a></li>
				<li><a href="class-TestInject.html">TestInject</a></li>
				<li><a href="class-TesttestDo.html">TesttestDo</a></li>
				<li><a href="class-XxxFilter.html">XxxFilter</a></li>
				<li><a href="class-YyyFilter.html">YyyFilter</a></li>
			</ul>

			<h3>Interfaces</h3>
			<ul>
				<li><a href="class-DIEvent_AppendFuncListener.html">DIEvent_AppendFuncListener</a></li>
				<li><a href="class-DIEvent_AppendVariableListener.html">DIEvent_AppendVariableListener</a></li>
				<li><a href="class-DIEvent_CallFuncListener.html">DIEvent_CallFuncListener</a></li>
				<li><a href="class-DIEvent_CallStaticFuncListener.html">DIEvent_CallStaticFuncListener</a></li>
				<li><a href="class-DIEvent_ClassCallListener.html">DIEvent_ClassCallListener</a></li>
				<li><a href="class-DIEvent_DestroyListener.html">DIEvent_DestroyListener</a></li>
				<li><a href="class-DIEvent_GetStaticVariableListener.html">DIEvent_GetStaticVariableListener</a></li>
				<li><a href="class-DIEvent_GetVariableListener.html">DIEvent_GetVariableListener</a></li>
				<li><a href="class-DIEvent_ObjCallListener.html">DIEvent_ObjCallListener</a></li>
				<li><a href="class-DIEvent_ObjCreateListener.html">DIEvent_ObjCreateListener</a></li>
				<li><a href="class-DIEvent_SetStaticVariableListener.html">DIEvent_SetStaticVariableListener</a></li>
				<li><a href="class-DIEvent_SetVariableListener.html">DIEvent_SetVariableListener</a></li>
				<li><a href="class-DIEventListener.html">DIEventListener</a></li>
				<li><a href="class-DIFilter.html">DIFilter</a></li>
				<li><a href="class-DIModelTemplate.html">DIModelTemplate</a></li>
			</ul>


			<h3>Exceptions</h3>
			<ul>
				<li><a href="class-DIException.html">DIException</a></li>
			</ul>


			<h3>Functions</h3>
			<ul>
				<li><a href="function-__autoload.html">__autoload</a></li>
				<li><a href="function-arg.html">arg</a></li>
				<li><a href="function-array_unset.html">array_unset</a></li>
				<li><a href="function-bt_page.html">bt_page</a></li>
				<li><a href="function-bt_shell_page.html">bt_shell_page</a></li>
				<li><a href="function-component_exist.html">component_exist</a></li>
				<li><a href="function-create_class.html">create_class</a></li>
				<li><a href="function-dump.html">dump</a></li>
				<li><a href="function-getip.html">getip</a></li>
				<li><a href="function-import.html">import</a></li>
				<li><a href="function-inject.html">inject</a></li>
				<li><a href="function-inject_dymic.html">inject_dymic</a></li>
				<li><a href="function-inject_full.html">inject_full</a></li>
				<li><a href="function-inject_func.html">inject_func</a></li>
				<li><a href="function-injectObjFunc.html">injectObjFunc</a></li>
				<li><a href="function-invoke_func.html">invoke_func</a></li>
				<li><a href="function-invoke_method.html">invoke_method</a></li>
				<li><a href="function-let.html">let</a></li>
				<li><a href="function-let_exists.html">let_exists</a></li>
				<li><a href="function-params_to_str.html">params_to_str</a></li>
				<li><a href="function-putjson.html">putjson</a></li>
				<li><a href="function-putjsonp.html">putjsonp</a></li>
				<li><a href="function-redirect.html">redirect</a></li>
				<li><a href="function-ref_arr.html">ref_arr</a></li>
				<li><a href="function-session.html">session</a></li>
				<li><a href="function-session_exists.html">session_exists</a></li>
				<li><a href="function-session_remove.html">session_remove</a></li>
				<li><a href="function-url.html">url</a></li>
			</ul>
		</div>
	</div>
</div>

<div id="splitter"></div>

<div id="right">
<div id="rightInner">
	<form id="search">
		<input type="hidden" name="cx" value="" />
		<input type="hidden" name="ie" value="UTF-8" />
		<input type="text" name="q" class="text" />
		<input type="submit" value="Search" />
	</form>

	<div id="navigation">
		<ul>
			<li>
				<a href="index.html" title="Overview"><span>Overview</span></a>
			</li>
			<li>
				<a href="namespace-None.html" title="Summary of None"><span>Namespace</span></a>
			</li>
			<li>
				<a href="class-DIModelUtil.html" title="Summary of DIModelUtil"><span>Class</span></a>
			</li>
		</ul>
		<ul>
			<li>
				<a href="tree.html" title="Tree view of classes, interfaces, traits and exceptions"><span>Tree</span></a>
			</li>
		</ul>
		<ul>
		</ul>
	</div>

<pre><code><a href="#1" id="1" class="l">  1: </a><span class="xlang">&lt;?php</span>
<a href="#2" id="2" class="l">  2: </a>
<a href="#3" id="3" class="l">  3: </a><span class="php-comment">/* Model层相关，以数据库为主 */</span>
<a href="#4" id="4" class="l">  4: </a><span class="php-comment">/* 为支持多种库，采用模板模式 */</span>
<a href="#5" id="5" class="l">  5: </a>
<a href="#6" id="6" class="l">  6: </a>
<a href="#7" id="7" class="l">  7: </a><span class="php-comment">/**
</span><a href="#8" id="8" class="l">  8: </a><span class="php-comment"> * 存放Model层的便捷实用方法和超级方法
</span><a href="#9" id="9" class="l">  9: </a><span class="php-comment"> */</span>
<a href="#10" id="10" class="l"> 10: </a><span class="php-keyword1">class</span> DIModelUtil {
<a href="#11" id="11" class="l"> 11: </a>    
<a href="#12" id="12" class="l"> 12: </a>    <span class="php-comment">/**
</span><a href="#13" id="13" class="l"> 13: </a><span class="php-comment">     * 根据简短表名获取继承于DIModel的模型实例
</span><a href="#14" id="14" class="l"> 14: </a><span class="php-comment">     * @return DIModel
</span><a href="#15" id="15" class="l"> 15: </a><span class="php-comment">     */</span>
<a href="#16" id="16" class="l"> 16: </a>    <span class="php-keyword1">static</span> <span class="php-keyword1">function</span> supertable(<span class="php-var">$shortname</span>){
<a href="#17" id="17" class="l"> 17: </a>        <span class="php-var">$table_class</span> = <span class="php-keyword2">ucfirst</span>(<span class="php-var">$shortname</span>) . <span class="php-keyword2">ucfirst</span>(DI_KEYWORD_MODEL);
<a href="#18" id="18" class="l"> 18: </a>        <span class="php-keyword1">if</span> (<span class="php-keyword2">class_exists</span>(<span class="php-var">$table_class</span>, <span class="php-keyword1">false</span>)) {
<a href="#19" id="19" class="l"> 19: </a>            <span class="php-keyword1">return</span> <span class="php-keyword1">new</span> <span class="php-var">$table_class</span>();
<a href="#20" id="20" class="l"> 20: </a>        } <span class="php-keyword1">else</span> {
<a href="#21" id="21" class="l"> 21: </a>            <span class="php-comment">//由于newInstance()过于先进，很多服务器不支持。建议先定义好XxxModel类再调用本方法</span>
<a href="#22" id="22" class="l"> 22: </a>            <span class="php-keyword1">return</span> create_class(<span class="php-var">$table_class</span>, <span class="php-keyword1">false</span>, <span class="php-quote">'DIModel'</span>)-&gt;newInstance();
<a href="#23" id="23" class="l"> 23: </a>        }
<a href="#24" id="24" class="l"> 24: </a>    }
<a href="#25" id="25" class="l"> 25: </a>    
<a href="#26" id="26" class="l"> 26: </a>}
<a href="#27" id="27" class="l"> 27: </a>
<a href="#28" id="28" class="l"> 28: </a>
<a href="#29" id="29" class="l"> 29: </a><span class="php-comment">//模型操作模板接口</span>
<a href="#30" id="30" class="l"> 30: </a><span class="php-keyword1">interface</span> DIModelTemplate {
<a href="#31" id="31" class="l"> 31: </a>    <span class="php-comment">/**
</span><a href="#32" id="32" class="l"> 32: </a><span class="php-comment">     * @return PDO
</span><a href="#33" id="33" class="l"> 33: </a><span class="php-comment">     */</span>
<a href="#34" id="34" class="l"> 34: </a>    <span class="php-keyword1">function</span> connect();
<a href="#35" id="35" class="l"> 35: </a>    <span class="php-keyword1">function</span> query(<span class="php-var">$sql</span>, <span class="php-var">$params</span> = <span class="php-keyword1">array</span>());
<a href="#36" id="36" class="l"> 36: </a>    <span class="php-keyword1">function</span> insert(<span class="php-var">$data</span> = <span class="php-keyword1">array</span>());
<a href="#37" id="37" class="l"> 37: </a>    <span class="php-keyword1">function</span> update(<span class="php-keyword1">array</span> <span class="php-var">$cond</span>, <span class="php-var">$data</span> = <span class="php-keyword1">array</span>());
<a href="#38" id="38" class="l"> 38: </a>    <span class="php-keyword1">function</span> alter(<span class="php-keyword1">array</span> <span class="php-var">$cond</span>, <span class="php-var">$field</span>, <span class="php-var">$optval</span> = <span class="php-quote">'+1'</span>);
<a href="#39" id="39" class="l"> 39: </a>    <span class="php-keyword1">function</span> alterByExpr(<span class="php-keyword1">array</span> <span class="php-var">$cond</span>, <span class="php-keyword1">array</span> <span class="php-var">$exprs</span>);
<a href="#40" id="40" class="l"> 40: </a>    <span class="php-keyword1">function</span> <span class="php-keyword2">delete</span>(<span class="php-keyword1">array</span> <span class="php-var">$cond</span>);
<a href="#41" id="41" class="l"> 41: </a>    <span class="php-keyword1">function</span> select(<span class="php-var">$cond</span>=<span class="php-keyword1">array</span>(), <span class="php-var">$field</span>=<span class="php-quote">''</span>, <span class="php-var">$order</span>=<span class="php-keyword1">null</span>, <span class="php-var">$limit</span>=<span class="php-keyword1">null</span>);
<a href="#42" id="42" class="l"> 42: </a>    <span class="php-keyword1">function</span> find(<span class="php-var">$cond</span>=<span class="php-keyword1">array</span>(), <span class="php-var">$field</span>=<span class="php-quote">''</span>, <span class="php-var">$order</span>=<span class="php-keyword1">null</span>);
<a href="#43" id="43" class="l"> 43: </a>    <span class="php-keyword1">function</span> <span class="php-keyword2">count</span>(<span class="php-var">$cond</span> = <span class="php-keyword1">null</span>, <span class="php-var">$bindparams</span> = <span class="php-keyword1">array</span>());
<a href="#44" id="44" class="l"> 44: </a>    <span class="php-keyword1">function</span> execute(<span class="php-var">$sql</span>=<span class="php-keyword1">null</span>, <span class="php-var">$bindparams</span>=<span class="php-keyword1">array</span>());
<a href="#45" id="45" class="l"> 45: </a>    <span class="php-keyword1">function</span> pager(<span class="php-var">$page</span>, <span class="php-var">$pageSize</span> = <span class="php-num">10</span>, <span class="php-var">$scope</span> = <span class="php-num">10</span>, <span class="php-var">$total</span>);
<a href="#46" id="46" class="l"> 46: </a>}
<a href="#47" id="47" class="l"> 47: </a>
<a href="#48" id="48" class="l"> 48: </a><span class="php-comment">/**
</span><a href="#49" id="49" class="l"> 49: </a><span class="php-comment"> * 套用模板的抽象模型
</span><a href="#50" id="50" class="l"> 50: </a><span class="php-comment"> * 会根据DIDBConfig::$driver来调用所需的数据库驱动，并套用具体的数据库操作过程
</span><a href="#51" id="51" class="l"> 51: </a><span class="php-comment"> * XxxxModel类只需要继承此类即可使用数据库操作。
</span><a href="#52" id="52" class="l"> 52: </a><span class="php-comment"> */</span>
<a href="#53" id="53" class="l"> 53: </a><span class="php-keyword1">abstract</span> <span class="php-keyword1">class</span> DIModel <span class="php-keyword1">extends</span> DIBase <span class="php-keyword1">implements</span> DIModelTemplate {
<a href="#54" id="54" class="l"> 54: </a>    <span class="php-keyword1">public</span> <span class="php-var">$table</span> = <span class="php-keyword1">null</span>;<span class="php-comment">//表名默认为前缀+类名去掉“Model”，也可以在继承后充写改属性来指定表名</span>
<a href="#55" id="55" class="l"> 55: </a>    <span class="php-keyword1">public</span> <span class="php-var">$page</span>;<span class="php-comment">//分页缓存变量，操作权共享给数据库驱动，如DIMySQL，详见__constructor()</span>
<a href="#56" id="56" class="l"> 56: </a>    <span class="php-keyword1">protected</span> <span class="php-keyword1">static</span> <span class="php-var">$_conn</span> = <span class="php-keyword1">null</span>;
<a href="#57" id="57" class="l"> 57: </a>    <span class="php-keyword1">protected</span> <span class="php-keyword1">static</span> <span class="php-var">$_cache_rs</span> = <span class="php-keyword1">array</span>();
<a href="#58" id="58" class="l"> 58: </a>    
<a href="#59" id="59" class="l"> 59: </a>    <span class="php-comment">/** @var DIModel */</span>
<a href="#60" id="60" class="l"> 60: </a>    <span class="php-keyword1">protected</span> <span class="php-keyword1">static</span> <span class="php-var">$_driver_handler</span>;
<a href="#61" id="61" class="l"> 61: </a>    
<a href="#62" id="62" class="l"> 62: </a>    <span class="php-keyword1">final</span> <span class="php-keyword1">function</span> __construct(){
<a href="#63" id="63" class="l"> 63: </a>        <span class="php-keyword1">if</span> (<span class="php-keyword1">empty</span>(<span class="php-var">$this</span>-&gt;table)) {
<a href="#64" id="64" class="l"> 64: </a>            <span class="php-var">$short_table</span> = <span class="php-var">$this</span>-&gt;getShortClassName(<span class="php-keyword2">ucfirst</span>(DI_KEYWORD_MODEL));
<a href="#65" id="65" class="l"> 65: </a>            <span class="php-var">$this</span>-&gt;table = <span class="php-keyword2">strtolower</span>(DIDBConfig::<span class="php-var">$table_prefix</span> . <span class="php-var">$short_table</span>);
<a href="#66" id="66" class="l"> 66: </a>        }
<a href="#67" id="67" class="l"> 67: </a>        self::<span class="php-var">$_conn</span> <span class="php-keyword1">or</span> self::_init();
<a href="#68" id="68" class="l"> 68: </a>    }
<a href="#69" id="69" class="l"> 69: </a>    
<a href="#70" id="70" class="l"> 70: </a>    <span class="php-keyword1">private</span> <span class="php-keyword1">function</span> _init(){
<a href="#71" id="71" class="l"> 71: </a>        <span class="php-var">$driver</span> = DIDBConfig::<span class="php-var">$driver</span>;
<a href="#72" id="72" class="l"> 72: </a>        <span class="php-keyword1">if</span> (!<span class="php-keyword2">class_exists</span>(<span class="php-var">$driver</span>, <span class="php-keyword1">false</span>)) {
<a href="#73" id="73" class="l"> 73: </a>            <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> DIException(<span class="php-quote">'找不到数据库驱动类，请检查数据库配置文件和驱动类文件'</span>);
<a href="#74" id="74" class="l"> 74: </a>        }
<a href="#75" id="75" class="l"> 75: </a>        <span class="php-keyword1">try</span> {
<a href="#76" id="76" class="l"> 76: </a>            self::<span class="php-var">$_driver_handler</span> = <span class="php-keyword1">new</span> <span class="php-var">$driver</span>(<span class="php-var">$this</span>-&gt;table, <span class="php-var">$this</span>);
<a href="#77" id="77" class="l"> 77: </a>        } <span class="php-keyword1">catch</span> (Exception <span class="php-var">$e</span>) {
<a href="#78" id="78" class="l"> 78: </a>            <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> DIException(<span class="php-var">$e</span>-&gt;getMessage());
<a href="#79" id="79" class="l"> 79: </a>        }
<a href="#80" id="80" class="l"> 80: </a>        <span class="php-var">$this</span>-&gt;connect();
<a href="#81" id="81" class="l"> 81: </a>    }
<a href="#82" id="82" class="l"> 82: </a>    
<a href="#83" id="83" class="l"> 83: </a>    <span class="php-comment">/**
</span><a href="#84" id="84" class="l"> 84: </a><span class="php-comment">     * 继承DIModel后的类在实例化后时自动连接数据库
</span><a href="#85" id="85" class="l"> 85: </a><span class="php-comment">     * @return PDO
</span><a href="#86" id="86" class="l"> 86: </a><span class="php-comment">     */</span>
<a href="#87" id="87" class="l"> 87: </a>    <span class="php-keyword1">final</span> <span class="php-keyword1">function</span> connect(){
<a href="#88" id="88" class="l"> 88: </a>        <span class="php-comment">//填写模板套用过程，并在DIModelTemplate中声明这些模板方法</span>
<a href="#89" id="89" class="l"> 89: </a>        self::<span class="php-var">$_conn</span> = self::<span class="php-var">$_driver_handler</span>-&gt;connect();
<a href="#90" id="90" class="l"> 90: </a>        <span class="php-keyword1">return</span> self::<span class="php-var">$_conn</span>;
<a href="#91" id="91" class="l"> 91: </a>    }
<a href="#92" id="92" class="l"> 92: </a>    
<a href="#93" id="93" class="l"> 93: </a>    <span class="php-keyword1">final</span> <span class="php-keyword1">function</span> query(<span class="php-var">$sql</span>, <span class="php-var">$params</span> = <span class="php-keyword1">array</span>()){
<a href="#94" id="94" class="l"> 94: </a>        <span class="php-keyword1">if</span> (<span class="php-keyword1">empty</span>(<span class="php-var">$sql</span>)) <span class="php-keyword1">return</span> <span class="php-keyword1">false</span>;
<a href="#95" id="95" class="l"> 95: </a>        <span class="php-comment">//填写模板套用过程，并在DIModelTemplate中声明这些模板方法</span>
<a href="#96" id="96" class="l"> 96: </a>        <span class="php-keyword1">return</span> self::<span class="php-var">$_driver_handler</span>-&gt;query(<span class="php-var">$sql</span>, <span class="php-var">$params</span>);
<a href="#97" id="97" class="l"> 97: </a>    }
<a href="#98" id="98" class="l"> 98: </a>    
<a href="#99" id="99" class="l"> 99: </a>    <span class="php-keyword1">final</span> <span class="php-keyword1">function</span> insert(<span class="php-var">$data</span> = <span class="php-keyword1">array</span>()){
<a href="#100" id="100" class="l">100: </a>        <span class="php-keyword1">if</span> (<span class="php-keyword1">empty</span>(<span class="php-var">$data</span>)) <span class="php-keyword1">return</span> <span class="php-keyword1">false</span>;
<a href="#101" id="101" class="l">101: </a>        <span class="php-comment">//填写模板套用过程，并在DIModelTemplate中声明这些模板方法</span>
<a href="#102" id="102" class="l">102: </a>        <span class="php-keyword1">return</span> self::<span class="php-var">$_driver_handler</span>-&gt;insert(<span class="php-var">$data</span>);
<a href="#103" id="103" class="l">103: </a>    }
<a href="#104" id="104" class="l">104: </a>    
<a href="#105" id="105" class="l">105: </a>    <span class="php-keyword1">final</span> <span class="php-keyword1">function</span> update(<span class="php-keyword1">array</span> <span class="php-var">$cond</span>, <span class="php-var">$data</span> = <span class="php-keyword1">array</span>()){
<a href="#106" id="106" class="l">106: </a>        <span class="php-comment">//填写模板套用过程，并在DIModelTemplate中声明这些模板方法</span>
<a href="#107" id="107" class="l">107: </a>        <span class="php-keyword1">return</span> self::<span class="php-var">$_driver_handler</span>-&gt;update(<span class="php-var">$cond</span>, <span class="php-var">$data</span>);
<a href="#108" id="108" class="l">108: </a>    }
<a href="#109" id="109" class="l">109: </a>    
<a href="#110" id="110" class="l">110: </a>    <span class="php-keyword1">function</span> alter(<span class="php-keyword1">array</span> <span class="php-var">$cond</span>, <span class="php-var">$field</span>, <span class="php-var">$optval</span> = <span class="php-quote">'+1'</span>) {
<a href="#111" id="111" class="l">111: </a>        <span class="php-keyword1">if</span> (<span class="php-keyword1">empty</span>(<span class="php-var">$cond</span>)) <span class="php-keyword1">return</span> <span class="php-keyword1">false</span>;
<a href="#112" id="112" class="l">112: </a>        <span class="php-comment">//填写模板套用过程，并在DIModelTemplate中声明这些模板方法</span>
<a href="#113" id="113" class="l">113: </a>        <span class="php-keyword1">return</span> self::<span class="php-var">$_driver_handler</span>-&gt;alter(<span class="php-var">$cond</span>, <span class="php-var">$field</span>, <span class="php-var">$optval</span>);
<a href="#114" id="114" class="l">114: </a>    }
<a href="#115" id="115" class="l">115: </a>    
<a href="#116" id="116" class="l">116: </a>    <span class="php-keyword1">function</span> alterByExpr(<span class="php-keyword1">array</span> <span class="php-var">$cond</span>, <span class="php-keyword1">array</span> <span class="php-var">$exprs</span>){
<a href="#117" id="117" class="l">117: </a>        <span class="php-keyword1">if</span> (<span class="php-keyword1">empty</span>(<span class="php-var">$cond</span>)) <span class="php-keyword1">return</span> <span class="php-keyword1">false</span>;
<a href="#118" id="118" class="l">118: </a>        <span class="php-comment">//填写模板套用过程，并在DIModelTemplate中声明这些模板方法</span>
<a href="#119" id="119" class="l">119: </a>        <span class="php-keyword1">return</span> self::<span class="php-var">$_driver_handler</span>-&gt;alterByExpr(<span class="php-var">$cond</span>, <span class="php-var">$exprs</span>);
<a href="#120" id="120" class="l">120: </a>    }
<a href="#121" id="121" class="l">121: </a>    
<a href="#122" id="122" class="l">122: </a>    <span class="php-keyword1">final</span> <span class="php-keyword1">function</span> <span class="php-keyword2">delete</span>(<span class="php-keyword1">array</span> <span class="php-var">$cond</span>){
<a href="#123" id="123" class="l">123: </a>        <span class="php-comment">//填写模板套用过程，并在DIModelTemplate中声明这些模板方法</span>
<a href="#124" id="124" class="l">124: </a>        <span class="php-keyword1">if</span> (<span class="php-keyword1">empty</span>(<span class="php-var">$cond</span>)) <span class="php-keyword1">return</span> <span class="php-keyword1">false</span>;
<a href="#125" id="125" class="l">125: </a>        <span class="php-keyword1">return</span> self::<span class="php-var">$_driver_handler</span>-&gt;<span class="php-keyword2">delete</span>(<span class="php-var">$cond</span>);
<a href="#126" id="126" class="l">126: </a>    }
<a href="#127" id="127" class="l">127: </a>    
<a href="#128" id="128" class="l">128: </a>    <span class="php-keyword1">final</span> <span class="php-keyword1">function</span> select(<span class="php-var">$cond</span>=<span class="php-keyword1">array</span>(), <span class="php-var">$field</span>=<span class="php-quote">''</span>, <span class="php-var">$order</span>=<span class="php-keyword1">null</span>, <span class="php-var">$limit</span>=<span class="php-keyword1">null</span>){
<a href="#129" id="129" class="l">129: </a>        <span class="php-comment">//填写模板套用过程，并在DIModelTemplate中声明这些模板方法</span>
<a href="#130" id="130" class="l">130: </a>        <span class="php-keyword1">return</span> self::<span class="php-var">$_driver_handler</span>-&gt;select(<span class="php-var">$cond</span>, <span class="php-var">$field</span>, <span class="php-var">$order</span>, <span class="php-var">$limit</span>);
<a href="#131" id="131" class="l">131: </a>    }
<a href="#132" id="132" class="l">132: </a>    
<a href="#133" id="133" class="l">133: </a>    <span class="php-keyword1">final</span> <span class="php-keyword1">function</span> find(<span class="php-var">$cond</span>=<span class="php-keyword1">array</span>(),<span class="php-var">$field</span>=<span class="php-quote">''</span>, <span class="php-var">$order</span>=<span class="php-keyword1">null</span>){
<a href="#134" id="134" class="l">134: </a>        <span class="php-comment">//填写模板套用过程，并在DIModelTemplate中声明这些模板方法</span>
<a href="#135" id="135" class="l">135: </a>        <span class="php-keyword1">return</span> self::<span class="php-var">$_driver_handler</span>-&gt;find(<span class="php-var">$cond</span>,<span class="php-var">$field</span>, <span class="php-var">$order</span>);
<a href="#136" id="136" class="l">136: </a>    }
<a href="#137" id="137" class="l">137: </a>    
<a href="#138" id="138" class="l">138: </a>    <span class="php-keyword1">final</span> <span class="php-keyword1">function</span> <span class="php-keyword2">count</span>(<span class="php-var">$cond</span> = <span class="php-keyword1">null</span>, <span class="php-var">$bindparams</span> = <span class="php-keyword1">array</span>()){
<a href="#139" id="139" class="l">139: </a>        <span class="php-comment">//填写模板套用过程，并在DIModelTemplate中声明这些模板方法</span>
<a href="#140" id="140" class="l">140: </a>        <span class="php-keyword1">return</span> self::<span class="php-var">$_driver_handler</span>-&gt;<span class="php-keyword2">count</span>(<span class="php-var">$cond</span>, <span class="php-var">$bindparams</span>);
<a href="#141" id="141" class="l">141: </a>    }
<a href="#142" id="142" class="l">142: </a>    
<a href="#143" id="143" class="l">143: </a>    <span class="php-keyword1">final</span> <span class="php-keyword1">function</span> execute(<span class="php-var">$sql</span>=<span class="php-keyword1">null</span>, <span class="php-var">$bindparams</span>=<span class="php-keyword1">array</span>()){
<a href="#144" id="144" class="l">144: </a>        <span class="php-comment">//填写模板套用过程，并在DIModelTemplate中声明这些模板方法</span>
<a href="#145" id="145" class="l">145: </a>        <span class="php-keyword1">return</span> self::<span class="php-var">$_driver_handler</span>-&gt;execute(<span class="php-var">$sql</span>, <span class="php-var">$bindparams</span>);
<a href="#146" id="146" class="l">146: </a>    }
<a href="#147" id="147" class="l">147: </a>    
<a href="#148" id="148" class="l">148: </a>    <span class="php-keyword1">final</span> <span class="php-keyword1">function</span> pager(<span class="php-var">$page</span>, <span class="php-var">$pageSize</span> = <span class="php-num">10</span>, <span class="php-var">$scope</span> = <span class="php-num">10</span>, <span class="php-var">$total</span>){
<a href="#149" id="149" class="l">149: </a>        <span class="php-comment">//填写模板套用过程，并在DIModelTemplate中声明这些模板方法</span>
<a href="#150" id="150" class="l">150: </a>        <span class="php-keyword1">return</span> self::<span class="php-var">$_driver_handler</span>-&gt;pager(<span class="php-var">$page</span>, <span class="php-var">$pageSize</span>, <span class="php-var">$scope</span>, <span class="php-var">$total</span>);
<a href="#151" id="151" class="l">151: </a>    }
<a href="#152" id="152" class="l">152: </a>}
<a href="#153" id="153" class="l">153: </a>
<a href="#154" id="154" class="l">154: </a>
<a href="#155" id="155" class="l">155: </a>
<a href="#156" id="156" class="l">156: </a><span class="php-comment">/**
</span><a href="#157" id="157" class="l">157: </a><span class="php-comment"> * 具体的MySQL驱动
</span><a href="#158" id="158" class="l">158: </a><span class="php-comment"> */</span>
<a href="#159" id="159" class="l">159: </a><span class="php-keyword1">class</span> DIMySQL <span class="php-keyword1">implements</span> DIModelTemplate {
<a href="#160" id="160" class="l">160: </a>    
<a href="#161" id="161" class="l">161: </a>    <span class="php-keyword1">protected</span> <span class="php-keyword1">static</span> <span class="php-var">$_conn</span>;<span class="php-comment">//与DIModel::$_conn存在引用关联，详见本类的&amp;connect()</span>
<a href="#162" id="162" class="l">162: </a>    <span class="php-keyword1">protected</span> <span class="php-var">$table</span>;<span class="php-comment">//当前表名</span>
<a href="#163" id="163" class="l">163: </a>    <span class="php-keyword1">protected</span> <span class="php-var">$_M</span>;<span class="php-comment">//DIModel对象授予操作权限</span>
<a href="#164" id="164" class="l">164: </a>    
<a href="#165" id="165" class="l">165: </a>    <span class="php-keyword1">function</span> __construct(<span class="php-var">$table</span>, DIModel <span class="php-var">$M</span>){
<a href="#166" id="166" class="l">166: </a>        <span class="php-var">$this</span>-&gt;table = <span class="php-var">$table</span>;
<a href="#167" id="167" class="l">167: </a>        <span class="php-var">$this</span>-&gt;_M = <span class="php-var">$M</span>;
<a href="#168" id="168" class="l">168: </a>    }
<a href="#169" id="169" class="l">169: </a>    
<a href="#170" id="170" class="l">170: </a>    <span class="php-comment">/** 
</span><a href="#171" id="171" class="l">171: </a><span class="php-comment">     * 连接并获取句柄
</span><a href="#172" id="172" class="l">172: </a><span class="php-comment">     * @return PDO
</span><a href="#173" id="173" class="l">173: </a><span class="php-comment">     */</span>
<a href="#174" id="174" class="l">174: </a>    <span class="php-keyword1">function</span> &amp;connect(){
<a href="#175" id="175" class="l">175: </a>        <span class="php-var">$dsn</span> = <span class="php-quote">'mysql:host='</span> . DIDBConfig::<span class="php-var">$host</span>;
<a href="#176" id="176" class="l">176: </a>        <span class="php-var">$dsn</span> .= <span class="php-quote">';dbname='</span> . DIDBConfig::<span class="php-var">$db</span>;
<a href="#177" id="177" class="l">177: </a>        <span class="php-var">$dsn</span> .= <span class="php-quote">';port='</span> . DIDBConfig::<span class="php-var">$port</span>;
<a href="#178" id="178" class="l">178: </a>        <span class="php-var">$options</span> = <span class="php-keyword1">array</span>(
<a href="#179" id="179" class="l">179: </a>            PDO::MYSQL_ATTR_INIT_COMMAND =&gt; <span class="php-quote">'set names utf8'</span>
<a href="#180" id="180" class="l">180: </a>        );
<a href="#181" id="181" class="l">181: </a>        self::<span class="php-var">$_conn</span> = <span class="php-keyword1">new</span> PDO(<span class="php-var">$dsn</span>, DIDBConfig::<span class="php-var">$user</span>, DIDBConfig::<span class="php-var">$pwd</span>, <span class="php-var">$options</span>);
<a href="#182" id="182" class="l">182: </a>        <span class="php-keyword1">return</span> self::<span class="php-var">$_conn</span>;
<a href="#183" id="183" class="l">183: </a>    }
<a href="#184" id="184" class="l">184: </a>    
<a href="#185" id="185" class="l">185: </a>    <span class="php-comment">/**
</span><a href="#186" id="186" class="l">186: </a><span class="php-comment">     * 示例
</span><a href="#187" id="187" class="l">187: </a><span class="php-comment">     * $month = date(&quot;Y-m-d&quot;, strtotime($date));
</span><a href="#188" id="188" class="l">188: </a><span class="php-comment">     * $sql = &quot;SELECT * FROM pai2_signin WHERE uid =:uid AND signin_date LIKE '{$month}%' ORDER BY signin_id ASC &quot;;
</span><a href="#189" id="189" class="l">189: </a><span class="php-comment">     * $rs = $this-&gt;query($sql, array('uid' =&gt; $uid));
</span><a href="#190" id="190" class="l">190: </a><span class="php-comment">     */</span>
<a href="#191" id="191" class="l">191: </a>    <span class="php-keyword1">function</span> query(<span class="php-var">$sql</span>, <span class="php-var">$params</span>=<span class="php-keyword1">array</span>()){
<a href="#192" id="192" class="l">192: </a>        <span class="php-var">$this</span>-&gt;sql = <span class="php-var">$sql</span>;
<a href="#193" id="193" class="l">193: </a>        <span class="php-var">$sth</span> = <span class="php-var">$this</span>-&gt;_bindParams(<span class="php-var">$sql</span>, <span class="php-var">$params</span>);
<a href="#194" id="194" class="l">194: </a>        <span class="php-keyword1">if</span>(<span class="php-var">$sth</span>-&gt;execute()) <span class="php-keyword1">return</span> <span class="php-var">$sth</span>-&gt;fetchAll(PDO::FETCH_OBJ);
<a href="#195" id="195" class="l">195: </a>        <span class="php-var">$err</span> = <span class="php-var">$sth</span>-&gt;errorInfo();
<a href="#196" id="196" class="l">196: </a>        <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> DIException(<span class="php-quote">'Database SQL: &quot;'</span> . <span class="php-var">$sql</span>. <span class="php-quote">'&quot;. ErrorInfo: '</span>. <span class="php-var">$err</span>[<span class="php-num">2</span>], <span class="php-num">1</span>);
<a href="#197" id="197" class="l">197: </a>    }
<a href="#198" id="198" class="l">198: </a>    
<a href="#199" id="199" class="l">199: </a>    <span class="php-keyword1">function</span> insert(<span class="php-var">$data</span> = <span class="php-keyword1">array</span>()){
<a href="#200" id="200" class="l">200: </a>        <span class="php-keyword1">foreach</span>(<span class="php-var">$data</span> <span class="php-keyword1">as</span> <span class="php-var">$k</span>=&gt;<span class="php-var">$v</span>){
<a href="#201" id="201" class="l">201: </a>            <span class="php-var">$keys</span>[] = <span class="php-quote">&quot;`</span><span class="php-var">{$k}</span><span class="php-quote">`&quot;</span>;
<a href="#202" id="202" class="l">202: </a>            <span class="php-var">$prevalues</span>[] = <span class="php-var">$k</span>;
<a href="#203" id="203" class="l">203: </a>            <span class="php-var">$values</span>[] = <span class="php-var">$this</span>-&gt;escape(<span class="php-var">$v</span>);
<a href="#204" id="204" class="l">204: </a>        }
<a href="#205" id="205" class="l">205: </a>        <span class="php-var">$sql</span> = <span class="php-quote">&quot;INSERT INTO &quot;</span> . <span class="php-var">$this</span>-&gt;table . <span class="php-quote">&quot; (&quot;</span> . <span class="php-keyword2">join</span>(<span class="php-quote">', '</span>, <span class="php-var">$keys</span>) . <span class="php-quote">&quot;) VALUES ( :&quot;</span> . <span class="php-keyword2">join</span>(<span class="php-quote">', :'</span>, <span class="php-var">$prevalues</span>) . <span class="php-quote">&quot;)&quot;</span>;
<a href="#206" id="206" class="l">206: </a>        <span class="php-var">$sth</span> = <span class="php-var">$this</span>-&gt;_bindParams(<span class="php-var">$sql</span>, <span class="php-var">$data</span>);
<a href="#207" id="207" class="l">207: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$sth</span>-&gt;execute()) <span class="php-keyword1">return</span> self::<span class="php-var">$_conn</span>-&gt;lastInsertId();
<a href="#208" id="208" class="l">208: </a>        <span class="php-var">$err</span> = <span class="php-var">$sth</span>-&gt;errorInfo();
<a href="#209" id="209" class="l">209: </a>        <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> Exception(<span class="php-quote">'Database SQL: &quot;'</span> . <span class="php-var">$sql</span>. <span class="php-quote">'&quot;. ErrorInfo: '</span>. <span class="php-var">$err</span>[<span class="php-num">2</span>], <span class="php-num">1</span>);
<a href="#210" id="210" class="l">210: </a>    }
<a href="#211" id="211" class="l">211: </a>    
<a href="#212" id="212" class="l">212: </a>    <span class="php-keyword1">function</span> update(<span class="php-keyword1">array</span> <span class="php-var">$cond</span>, <span class="php-var">$data</span> = <span class="php-keyword1">array</span>()){
<a href="#213" id="213" class="l">213: </a>        <span class="php-keyword1">if</span>( <span class="php-keyword1">empty</span>(<span class="php-var">$cond</span>) ) <span class="php-keyword1">return</span> <span class="php-keyword1">false</span>;
<a href="#214" id="214" class="l">214: </a>        <span class="php-keyword1">foreach</span> (<span class="php-var">$data</span> <span class="php-keyword1">as</span> <span class="php-var">$k</span>=&gt;<span class="php-var">$v</span>){
<a href="#215" id="215" class="l">215: </a>            <span class="php-var">$setstr</span>[] = <span class="php-quote">&quot;`</span><span class="php-var">{$k}</span><span class="php-quote">`=&quot;</span>.<span class="php-var">$this</span>-&gt;escape(<span class="php-var">$v</span>);
<a href="#216" id="216" class="l">216: </a>        }
<a href="#217" id="217" class="l">217: </a>        <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;execute(<span class="php-quote">&quot;UPDATE &quot;</span>.<span class="php-var">$this</span>-&gt;table.<span class="php-quote">&quot; SET &quot;</span>.<span class="php-keyword2">implode</span>(<span class="php-quote">', '</span>, <span class="php-var">$setstr</span>).<span class="php-var">$this</span>-&gt;_where(<span class="php-var">$cond</span>));
<a href="#218" id="218" class="l">218: </a>    }
<a href="#219" id="219" class="l">219: </a>    
<a href="#220" id="220" class="l">220: </a>    <span class="php-comment">/**
</span><a href="#221" id="221" class="l">221: </a><span class="php-comment">     * 在原字段值基础上修改（一个字段）
</span><a href="#222" id="222" class="l">222: </a><span class="php-comment">     * 如 alter(array('id'=&gt;1, 'key'=&gt;'k1'), 'nums', '-5')
</span><a href="#223" id="223" class="l">223: </a><span class="php-comment">     * 还没试过符号：*、/、%
</span><a href="#224" id="224" class="l">224: </a><span class="php-comment">     */</span>
<a href="#225" id="225" class="l">225: </a>    <span class="php-keyword1">function</span> alter(<span class="php-keyword1">array</span> <span class="php-var">$cond</span>, <span class="php-var">$field</span>, <span class="php-var">$optval</span> = <span class="php-quote">'+1'</span>) {
<a href="#226" id="226" class="l">226: </a>        <span class="php-keyword1">if</span>( <span class="php-keyword1">empty</span>(<span class="php-var">$cond</span>) ) <span class="php-keyword1">return</span> <span class="php-keyword1">false</span>;
<a href="#227" id="227" class="l">227: </a>        <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;execute(<span class="php-quote">&quot;UPDATE &quot;</span>.<span class="php-var">$this</span>-&gt;table.<span class="php-quote">&quot; SET `</span><span class="php-var">{$field}</span><span class="php-quote">` = `</span><span class="php-var">{$field}</span><span class="php-quote">` </span><span class="php-var">{$optval}</span><span class="php-quote"> &quot;</span>.<span class="php-var">$this</span>-&gt;_where(<span class="php-var">$cond</span>));
<a href="#228" id="228" class="l">228: </a>    }
<a href="#229" id="229" class="l">229: </a>    
<a href="#230" id="230" class="l">230: </a>    <span class="php-comment">/**
</span><a href="#231" id="231" class="l">231: </a><span class="php-comment">     * 在原字段值基础上修改（自定义表达式，可以改多个字段）
</span><a href="#232" id="232" class="l">232: </a><span class="php-comment">     * @param array $cond
</span><a href="#233" id="233" class="l">233: </a><span class="php-comment">     * @param array $exprs
</span><a href="#234" id="234" class="l">234: </a><span class="php-comment">     *      如：array(&quot;nums=nums+1&quot;, &quot;`value`=`value`-1&quot;)
</span><a href="#235" id="235" class="l">235: </a><span class="php-comment">     * @return boolean|number
</span><a href="#236" id="236" class="l">236: </a><span class="php-comment">     */</span>
<a href="#237" id="237" class="l">237: </a>    <span class="php-keyword1">function</span> alterByExpr(<span class="php-keyword1">array</span> <span class="php-var">$cond</span>, <span class="php-keyword1">array</span> <span class="php-var">$exprs</span>){
<a href="#238" id="238" class="l">238: </a>        <span class="php-keyword1">if</span> (<span class="php-keyword1">empty</span>(<span class="php-var">$cond</span>)) <span class="php-keyword1">return</span> <span class="php-keyword1">false</span>;
<a href="#239" id="239" class="l">239: </a>        <span class="php-var">$set</span> = <span class="php-quote">'SET '</span> . <span class="php-keyword2">join</span>(<span class="php-quote">', '</span>, <span class="php-var">$exprs</span>);
<a href="#240" id="240" class="l">240: </a>        <span class="php-var">$sql</span> = <span class="php-quote">&quot;UPDATE </span><span class="php-var">{$this-&gt;table}</span><span class="php-quote"> </span><span class="php-var">{$set}</span><span class="php-quote"> </span><span class="php-var">{$this-&gt;_where($cond)}</span><span class="php-quote">&quot;</span>;
<a href="#241" id="241" class="l">241: </a>        <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;execute(<span class="php-var">$sql</span>);
<a href="#242" id="242" class="l">242: </a>    }
<a href="#243" id="243" class="l">243: </a>    
<a href="#244" id="244" class="l">244: </a>    <span class="php-keyword1">function</span> <span class="php-keyword2">delete</span>(<span class="php-keyword1">array</span> <span class="php-var">$cond</span>){
<a href="#245" id="245" class="l">245: </a>        <span class="php-keyword1">if</span>(<span class="php-keyword1">empty</span>(<span class="php-var">$cond</span>)) <span class="php-keyword1">return</span> <span class="php-keyword1">false</span>;
<a href="#246" id="246" class="l">246: </a>        <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;execute(<span class="php-quote">&quot;DELETE FROM &quot;</span>.<span class="php-var">$this</span>-&gt;table.<span class="php-var">$this</span>-&gt;_where( <span class="php-var">$cond</span> ));
<a href="#247" id="247" class="l">247: </a>    }
<a href="#248" id="248" class="l">248: </a>    
<a href="#249" id="249" class="l">249: </a>    <span class="php-comment">//limit参数说明array(当前页码，页内条数上限，可见页码数)</span>
<a href="#250" id="250" class="l">250: </a>    <span class="php-keyword1">function</span> select(<span class="php-var">$conditions</span>=<span class="php-keyword1">array</span>(), <span class="php-var">$field</span>=<span class="php-quote">''</span>, <span class="php-var">$order</span>=<span class="php-keyword1">null</span>, <span class="php-var">$limit</span>=<span class="php-keyword1">null</span>){
<a href="#251" id="251" class="l">251: </a>        <span class="php-var">$field</span> = !<span class="php-keyword1">empty</span>(<span class="php-var">$field</span>) ? <span class="php-var">$field</span> : <span class="php-quote">'*'</span>;
<a href="#252" id="252" class="l">252: </a>        <span class="php-var">$order</span> = !<span class="php-keyword1">empty</span>(<span class="php-var">$order</span>) ? <span class="php-quote">' ORDER BY '</span>.<span class="php-var">$order</span> : <span class="php-quote">''</span>;
<a href="#253" id="253" class="l">253: </a>        <span class="php-var">$sql</span> = <span class="php-quote">' FROM '</span>.<span class="php-var">$this</span>-&gt;table.<span class="php-var">$this</span>-&gt;_where(<span class="php-var">$conditions</span>);
<a href="#254" id="254" class="l">254: </a>        <span class="php-keyword1">if</span>(<span class="php-keyword2">is_array</span>(<span class="php-var">$limit</span>)){
<a href="#255" id="255" class="l">255: </a>            <span class="php-keyword1">if</span>(! <span class="php-var">$total</span> = <span class="php-var">$this</span>-&gt;query(<span class="php-quote">'SELECT COUNT(*) as dw_counter '</span>.<span class="php-var">$sql</span>))<span class="php-keyword1">return</span> <span class="php-keyword1">null</span>;
<a href="#256" id="256" class="l">256: </a>            <span class="php-var">$limit</span> = <span class="php-var">$limit</span> + <span class="php-keyword1">array</span>(<span class="php-num">1</span>, <span class="php-num">10</span>, <span class="php-num">10</span>);
<a href="#257" id="257" class="l">257: </a>            <span class="php-var">$limit</span> = <span class="php-var">$this</span>-&gt;pager(<span class="php-var">$limit</span>[<span class="php-num">0</span>], <span class="php-var">$limit</span>[<span class="php-num">1</span>], <span class="php-var">$limit</span>[<span class="php-num">2</span>], <span class="php-var">$total</span>[<span class="php-num">0</span>]-&gt;dw_counter);
<a href="#258" id="258" class="l">258: </a>            <span class="php-var">$limit</span> = <span class="php-keyword1">empty</span>(<span class="php-var">$limit</span>) ? <span class="php-quote">''</span> : <span class="php-quote">' LIMIT '</span>.<span class="php-var">$limit</span>[<span class="php-quote">'offset'</span>].<span class="php-quote">','</span>.<span class="php-var">$limit</span>[<span class="php-quote">'limit'</span>];           
<a href="#259" id="259" class="l">259: </a>        }<span class="php-keyword1">else</span>{
<a href="#260" id="260" class="l">260: </a>            <span class="php-var">$limit</span> = !<span class="php-keyword1">empty</span>(<span class="php-var">$limit</span>) ? <span class="php-quote">' LIMIT '</span>.<span class="php-var">$limit</span> : <span class="php-quote">''</span>;
<a href="#261" id="261" class="l">261: </a>        }
<a href="#262" id="262" class="l">262: </a>        <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;query(<span class="php-quote">'SELECT '</span>. <span class="php-var">$field</span> . <span class="php-var">$sql</span> . <span class="php-var">$order</span> . <span class="php-var">$limit</span>);
<a href="#263" id="263" class="l">263: </a>    }
<a href="#264" id="264" class="l">264: </a>    
<a href="#265" id="265" class="l">265: </a>    <span class="php-keyword1">function</span> find(<span class="php-var">$conditions</span>=<span class="php-keyword1">array</span>(),<span class="php-var">$field</span>=<span class="php-quote">''</span>, <span class="php-var">$order</span>=<span class="php-keyword1">null</span>){
<a href="#266" id="266" class="l">266: </a>        <span class="php-var">$field</span> = !<span class="php-keyword1">empty</span>(<span class="php-var">$field</span>) ? <span class="php-var">$field</span> : <span class="php-quote">'*'</span>;
<a href="#267" id="267" class="l">267: </a>        <span class="php-var">$res</span> = <span class="php-var">$this</span>-&gt;select(<span class="php-var">$conditions</span>,<span class="php-var">$field</span>, <span class="php-var">$order</span>,<span class="php-num">1</span>);
<a href="#268" id="268" class="l">268: </a>        <span class="php-keyword1">return</span> !<span class="php-keyword1">empty</span>(<span class="php-var">$res</span>) ? <span class="php-keyword2">array_pop</span>(<span class="php-var">$res</span>) : <span class="php-keyword1">false</span>;
<a href="#269" id="269" class="l">269: </a>    }
<a href="#270" id="270" class="l">270: </a>    
<a href="#271" id="271" class="l">271: </a>    <span class="php-comment">/**
</span><a href="#272" id="272" class="l">272: </a><span class="php-comment">     * 两种方式统计总数
</span><a href="#273" id="273" class="l">273: </a><span class="php-comment">     * 示例：$t = DIModelUtil::supertable('table');
</span><a href="#274" id="274" class="l">274: </a><span class="php-comment">     * 1、$t-&gt;count(array('id'=&gt;2));
</span><a href="#275" id="275" class="l">275: </a><span class="php-comment">     * 2、$t-&gt;count(array('id &gt; :id'), array('id'=&gt;2));
</span><a href="#276" id="276" class="l">276: </a><span class="php-comment">     */</span>
<a href="#277" id="277" class="l">277: </a>    <span class="php-keyword1">function</span> <span class="php-keyword2">count</span>(<span class="php-var">$conditions</span> = <span class="php-keyword1">null</span>, <span class="php-var">$bindparams</span> = <span class="php-keyword1">array</span>()){
<a href="#278" id="278" class="l">278: </a>        <span class="php-var">$select</span> = <span class="php-quote">&quot;SELECT COUNT(*) AS total FROM </span><span class="php-var">{$this-&gt;table}</span><span class="php-quote"> &quot;</span>;
<a href="#279" id="279" class="l">279: </a>        <span class="php-var">$needbind</span> = <span class="php-keyword1">false</span>;<span class="php-comment">//是否需要预处理参数</span>
<a href="#280" id="280" class="l">280: </a>        <span class="php-var">$where</span> = <span class="php-quote">' WHERE 1 '</span>;
<a href="#281" id="281" class="l">281: </a>        <span class="php-keyword1">foreach</span> (<span class="php-var">$conditions</span> <span class="php-keyword1">as</span> <span class="php-var">$i</span>=&gt;<span class="php-var">$c</span>) {
<a href="#282" id="282" class="l">282: </a>            <span class="php-keyword1">if</span> (<span class="php-keyword2">is_numeric</span>(<span class="php-var">$i</span>)) {
<a href="#283" id="283" class="l">283: </a>                <span class="php-var">$needbind</span> = <span class="php-keyword1">true</span>;
<a href="#284" id="284" class="l">284: </a>                <span class="php-var">$where</span> .= <span class="php-quote">&quot; AND </span><span class="php-var">{$c}</span><span class="php-quote"> &quot;</span>;
<a href="#285" id="285" class="l">285: </a>            }
<a href="#286" id="286" class="l">286: </a>        }
<a href="#287" id="287" class="l">287: </a>        <span class="php-keyword1">if</span> (!<span class="php-var">$needbind</span>) {
<a href="#288" id="288" class="l">288: </a>            <span class="php-var">$count</span> = <span class="php-var">$this</span>-&gt;query(<span class="php-var">$select</span> . <span class="php-var">$this</span>-&gt;_where(<span class="php-var">$conditions</span>));
<a href="#289" id="289" class="l">289: </a>        } <span class="php-keyword1">else</span> {
<a href="#290" id="290" class="l">290: </a>            <span class="php-var">$count</span> = <span class="php-var">$this</span>-&gt;query(<span class="php-quote">&quot;</span><span class="php-var">{$select}</span><span class="php-quote"> </span><span class="php-var">{$where}</span><span class="php-quote">&quot;</span>, <span class="php-var">$bindparams</span>);
<a href="#291" id="291" class="l">291: </a>        }
<a href="#292" id="292" class="l">292: </a>        <span class="php-keyword1">return</span> <span class="php-keyword1">isset</span>(<span class="php-var">$count</span>[<span class="php-num">0</span>]-&gt;total) &amp;&amp; <span class="php-var">$count</span>[<span class="php-num">0</span>]-&gt;total ? <span class="php-var">$count</span>[<span class="php-num">0</span>]-&gt;total : <span class="php-num">0</span>;
<a href="#293" id="293" class="l">293: </a>    }
<a href="#294" id="294" class="l">294: </a>    
<a href="#295" id="295" class="l">295: </a>    <span class="php-keyword1">function</span> execute(<span class="php-var">$sql</span>=<span class="php-keyword1">null</span>, <span class="php-var">$params</span>=<span class="php-keyword1">array</span>()){
<a href="#296" id="296" class="l">296: </a>        <span class="php-var">$this</span>-&gt;sql = <span class="php-var">$sql</span>;
<a href="#297" id="297" class="l">297: </a>        <span class="php-var">$sth</span> = <span class="php-var">$this</span>-&gt;_bindParams( <span class="php-var">$sql</span>, <span class="php-var">$params</span> );
<a href="#298" id="298" class="l">298: </a>        <span class="php-keyword1">if</span>( <span class="php-var">$sth</span>-&gt;execute() ) <span class="php-keyword1">return</span> <span class="php-var">$sth</span>-&gt;rowCount();
<a href="#299" id="299" class="l">299: </a>        <span class="php-var">$err</span> = <span class="php-var">$sth</span>-&gt;errorInfo();
<a href="#300" id="300" class="l">300: </a>        <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> Exception(<span class="php-quote">'Database SQL: &quot;'</span> . <span class="php-var">$sql</span>. <span class="php-quote">'&quot;. ErrorInfo: '</span>. <span class="php-var">$err</span>[<span class="php-num">2</span>], <span class="php-num">1</span>);
<a href="#301" id="301" class="l">301: </a>    }
<a href="#302" id="302" class="l">302: </a>    
<a href="#303" id="303" class="l">303: </a>    <span class="php-keyword1">private</span> <span class="php-keyword1">function</span> _bindParams(<span class="php-var">$sql</span>, <span class="php-var">$params</span>=<span class="php-keyword1">array</span>()){
<a href="#304" id="304" class="l">304: </a>        <span class="php-var">$sth</span> = self::<span class="php-var">$_conn</span>-&gt;prepare(<span class="php-var">$sql</span>);
<a href="#305" id="305" class="l">305: </a>        <span class="php-keyword1">if</span>(<span class="php-keyword2">is_array</span>(<span class="php-var">$params</span>) &amp;&amp; !<span class="php-keyword1">empty</span>(<span class="php-var">$params</span>)){
<a href="#306" id="306" class="l">306: </a>            <span class="php-keyword1">foreach</span>(<span class="php-var">$params</span> <span class="php-keyword1">as</span> <span class="php-var">$k</span>=&gt;&amp;<span class="php-var">$v</span>){
<a href="#307" id="307" class="l">307: </a>                <span class="php-var">$sth</span>-&gt;bindParam(<span class="php-var">$k</span>, <span class="php-var">$v</span>);
<a href="#308" id="308" class="l">308: </a>            }
<a href="#309" id="309" class="l">309: </a>        }
<a href="#310" id="310" class="l">310: </a>        <span class="php-keyword1">return</span> <span class="php-var">$sth</span>;
<a href="#311" id="311" class="l">311: </a>    }
<a href="#312" id="312" class="l">312: </a>    
<a href="#313" id="313" class="l">313: </a>    <span class="php-keyword1">private</span> <span class="php-keyword1">function</span> _where(<span class="php-var">$conditions</span> = <span class="php-keyword1">array</span>()){
<a href="#314" id="314" class="l">314: </a>        <span class="php-keyword1">if</span>(<span class="php-keyword2">is_array</span>(<span class="php-var">$conditions</span>) &amp;&amp; !<span class="php-keyword1">empty</span>(<span class="php-var">$conditions</span>)){
<a href="#315" id="315" class="l">315: </a>            <span class="php-var">$join</span> = <span class="php-keyword1">array</span>();
<a href="#316" id="316" class="l">316: </a>            <span class="php-keyword1">foreach</span>( <span class="php-var">$conditions</span> <span class="php-keyword1">as</span> <span class="php-var">$key</span> =&gt; <span class="php-var">$condition</span> ){
<a href="#317" id="317" class="l">317: </a>                <span class="php-var">$condition</span> = <span class="php-var">$this</span>-&gt;escape(<span class="php-var">$condition</span>);
<a href="#318" id="318" class="l">318: </a>                <span class="php-var">$join</span>[] = <span class="php-quote">&quot;`</span><span class="php-var">{$key}</span><span class="php-quote">` = </span><span class="php-var">{$condition}</span><span class="php-quote">&quot;</span>;
<a href="#319" id="319" class="l">319: </a>            }
<a href="#320" id="320" class="l">320: </a>            <span class="php-keyword1">return</span> <span class="php-quote">&quot; WHERE &quot;</span>.<span class="php-keyword2">join</span>(<span class="php-quote">&quot; AND &quot;</span>,<span class="php-var">$join</span>);
<a href="#321" id="321" class="l">321: </a>        }
<a href="#322" id="322" class="l">322: </a>        <span class="php-keyword1">return</span> <span class="php-quote">' '</span>;
<a href="#323" id="323" class="l">323: </a>    }
<a href="#324" id="324" class="l">324: </a>    
<a href="#325" id="325" class="l">325: </a>    <span class="php-keyword1">private</span> <span class="php-keyword1">function</span> escape(<span class="php-var">$str</span>){
<a href="#326" id="326" class="l">326: </a>        <span class="php-keyword1">if</span>(<span class="php-keyword2">is_null</span>(<span class="php-var">$str</span>))<span class="php-keyword1">return</span> <span class="php-quote">'null'</span>;
<a href="#327" id="327" class="l">327: </a>        <span class="php-keyword1">if</span>(<span class="php-keyword2">is_bool</span>(<span class="php-var">$str</span>))<span class="php-keyword1">return</span> <span class="php-var">$str</span> ? <span class="php-num">1</span> : <span class="php-num">0</span>;
<a href="#328" id="328" class="l">328: </a>        <span class="php-keyword1">if</span>(<span class="php-keyword2">is_int</span>(<span class="php-var">$str</span>))<span class="php-keyword1">return</span> (int)<span class="php-var">$str</span>;
<a href="#329" id="329" class="l">329: </a>        <span class="php-keyword1">if</span>(@<span class="php-keyword2">get_magic_quotes_gpc</span>())<span class="php-var">$str</span> = <span class="php-keyword2">stripslashes</span>(<span class="php-var">$str</span>);
<a href="#330" id="330" class="l">330: </a>        <span class="php-keyword1">return</span> self::<span class="php-var">$_conn</span>-&gt;quote(<span class="php-var">$str</span>);
<a href="#331" id="331" class="l">331: </a>    }
<a href="#332" id="332" class="l">332: </a>    
<a href="#333" id="333" class="l">333: </a>    <span class="php-comment">//参数：当前页码，页内条数上限，可见页码数，记录总条数</span>
<a href="#334" id="334" class="l">334: </a>    <span class="php-keyword1">function</span> pager(<span class="php-var">$page</span>, <span class="php-var">$pageSize</span> = <span class="php-num">10</span>, <span class="php-var">$scope</span> = <span class="php-num">10</span>, <span class="php-var">$total</span>)
<a href="#335" id="335" class="l">335: </a>    {
<a href="#336" id="336" class="l">336: </a>        <span class="php-var">$total_page</span> = <span class="php-keyword2">ceil</span>( <span class="php-var">$total</span> / <span class="php-var">$pageSize</span> );
<a href="#337" id="337" class="l">337: </a>        <span class="php-var">$page</span> = <span class="php-keyword2">max</span>(<span class="php-keyword2">intval</span>(<span class="php-var">$page</span>), <span class="php-num">1</span>);
<a href="#338" id="338" class="l">338: </a>        <span class="php-var">$this</span>-&gt;_M-&gt;page = <span class="php-keyword1">array</span>(
<a href="#339" id="339" class="l">339: </a>            <span class="php-quote">'total_count'</span> =&gt; <span class="php-var">$total</span>,
<a href="#340" id="340" class="l">340: </a>            <span class="php-quote">'page_size'</span>   =&gt; <span class="php-var">$pageSize</span>,
<a href="#341" id="341" class="l">341: </a>            <span class="php-quote">'total_page'</span>  =&gt; <span class="php-var">$total_page</span>,
<a href="#342" id="342" class="l">342: </a>            <span class="php-quote">'first_page'</span>  =&gt; <span class="php-num">1</span>,
<a href="#343" id="343" class="l">343: </a>            <span class="php-quote">'prev_page'</span>   =&gt; ( ( <span class="php-num">1</span> == <span class="php-var">$page</span> ) ? <span class="php-num">1</span> : (<span class="php-var">$page</span> - <span class="php-num">1</span>) ),
<a href="#344" id="344" class="l">344: </a>            <span class="php-quote">'next_page'</span>   =&gt; ( ( <span class="php-var">$page</span> == <span class="php-var">$total_page</span> ) ? <span class="php-var">$total_page</span> : (<span class="php-var">$page</span> + <span class="php-num">1</span>)),
<a href="#345" id="345" class="l">345: </a>            <span class="php-quote">'last_page'</span>   =&gt; <span class="php-var">$total_page</span>,
<a href="#346" id="346" class="l">346: </a>            <span class="php-quote">'current_page'</span>=&gt; <span class="php-var">$page</span>,
<a href="#347" id="347" class="l">347: </a>            <span class="php-quote">'all_pages'</span>   =&gt; <span class="php-keyword1">array</span>(),
<a href="#348" id="348" class="l">348: </a>            <span class="php-quote">'offset'</span>      =&gt; (<span class="php-var">$page</span> - <span class="php-num">1</span>) * <span class="php-var">$pageSize</span>,
<a href="#349" id="349" class="l">349: </a>            <span class="php-quote">'limit'</span>       =&gt; <span class="php-var">$pageSize</span>,
<a href="#350" id="350" class="l">350: </a>        );
<a href="#351" id="351" class="l">351: </a>        <span class="php-var">$scope</span> = (int)<span class="php-var">$scope</span>;
<a href="#352" id="352" class="l">352: </a>    
<a href="#353" id="353" class="l">353: </a>        <span class="php-keyword1">if</span>(<span class="php-var">$total</span> &lt;= <span class="php-var">$pageSize</span>){
<a href="#354" id="354" class="l">354: </a>            <span class="php-var">$this</span>-&gt;_M-&gt;page[<span class="php-quote">'all_pages'</span>] =  <span class="php-keyword1">array</span>();
<a href="#355" id="355" class="l">355: </a>        }<span class="php-keyword1">elseif</span>(<span class="php-var">$total_page</span> &lt;= <span class="php-var">$scope</span> ){
<a href="#356" id="356" class="l">356: </a>            <span class="php-var">$this</span>-&gt;_M-&gt;page[<span class="php-quote">'all_pages'</span>] = <span class="php-keyword2">range</span>(<span class="php-num">1</span>, <span class="php-var">$total_page</span>);
<a href="#357" id="357" class="l">357: </a>        }<span class="php-keyword1">elseif</span>( <span class="php-var">$page</span> &lt;= <span class="php-var">$scope</span>/<span class="php-num">2</span>) {
<a href="#358" id="358" class="l">358: </a>            <span class="php-var">$this</span>-&gt;_M-&gt;page[<span class="php-quote">'all_pages'</span>] = <span class="php-keyword2">range</span>(<span class="php-num">1</span>, <span class="php-var">$scope</span>);
<a href="#359" id="359" class="l">359: </a>        }<span class="php-keyword1">elseif</span>( <span class="php-var">$page</span> &lt;= <span class="php-var">$total_page</span> - <span class="php-var">$scope</span>/<span class="php-num">2</span> ){
<a href="#360" id="360" class="l">360: </a>            <span class="php-var">$right</span> = <span class="php-var">$page</span> + (int)(<span class="php-var">$scope</span>/<span class="php-num">2</span>);
<a href="#361" id="361" class="l">361: </a>            <span class="php-var">$this</span>-&gt;_M-&gt;page[<span class="php-quote">'all_pages'</span>] = <span class="php-keyword2">range</span>(<span class="php-var">$right</span>-<span class="php-var">$scope</span>+<span class="php-num">1</span>, <span class="php-var">$right</span>);
<a href="#362" id="362" class="l">362: </a>        }<span class="php-keyword1">else</span>{
<a href="#363" id="363" class="l">363: </a>            <span class="php-var">$this</span>-&gt;_M-&gt;page[<span class="php-quote">'all_pages'</span>] = <span class="php-keyword2">range</span>(<span class="php-var">$total_page</span>-<span class="php-var">$scope</span>+<span class="php-num">1</span>, <span class="php-var">$total_page</span>);
<a href="#364" id="364" class="l">364: </a>        }
<a href="#365" id="365" class="l">365: </a>        <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;_M-&gt;page;
<a href="#366" id="366" class="l">366: </a>    }
<a href="#367" id="367" class="l">367: </a>    
<a href="#368" id="368" class="l">368: </a>}
<a href="#369" id="369" class="l">369: </a></code></pre>

	<div id="footer">
		 API documentation generated by <a href="http://apigen.org">ApiGen 2.6.0</a>
	</div>
</div>
</div>
</body>
</html>
